package randomthoughts.dp;

/**
 * @author tongchen
 * @create 2023-04-16 23:47
 */
public class ClimbStairPlus {
    public static void main(String[] args) {
        System.out.println(climbStair(2, 2));
    }

    /**\完全背包问题
     * 五部曲:1.dp【i】:爬上i台阶有多少种方法 i代表台阶数2.递推公式：dp[i]+=dp[j] 3.初始化：dp[0]=0  4.遍历方式:从前往后
     * @return
     */
    public static int climbStair(int n,int m){
        //创建dp数组
        int[]dp=new int[n+1];
        int [] foot=new int[m];
        for (int i = 0; i < foot.length ; i++) {
            foot[i]=i+1;
        }
        //初始化
        dp[0]=1;
        //先遍历容量，在遍历物品
        for (int i = 1; i <= n ; i++) {
            for (int j = 0; j < foot.length ; j++) {
                if(i>=foot[j]){
                    dp[i]+=dp[i-foot[j]];
                }
            }
        }
        return dp[n];
    }
}
